<?php

namespace Model;

class Register {
	
	private $db = null;
	
	public function __construct(Database $db) {
		$this->db = $db;
	}
	
	// Registrerar en ny användare
	public function register_user($username, $password) {
		
		// Matcha mot databas
		$match_user = $this->user_exists($username);
		
		// Om användarnamnet är upptaget...
		if ($match_user != null) {
			return false;
		}
		
		// Kryptera lösenord
		$hash = md5($this->db->salt.$password.$this->db->salt);
		
		// Lägg till användare
		$stmt = $this->db->prepare("INSERT INTO users (user_name, user_pass) VALUES (?, ?)");
		$stmt->bind_param('ss', $username, $hash);
		
		return $this->db->query($stmt);
		
	}
	
	// Kollar om en användare finns
	public function user_exists($username) {
		$stmt = $this->db->prepare("SELECT user_name FROM users WHERE user_name = ?");
		$stmt->bind_param('s', $username);
		return $this->db->select_one($stmt) ? true : false;
	}
	
	// Raderar en användare
	public function delete_user($username) {
		$stmt = $this->db->prepare("DELETE FROM users WHERE user_name = ?");
		$stmt->bind_param('s', $username);
		return $this->db->query($stmt);
	}
	
	public static function test(Database $db) {
		
		$sut = new Register($db);
		
		// Testet kommer registrera en testanvändare - finns det redan en med det namnet ska den tas bort först
		if (!$sut->delete_user("SUT::TEST::REGISTER")) {
			echo "Fel: Borttagning av användare innan test misslyckades.";
			return false;
		}
		
		// Registrera testanvändare
		if (!$sut->register_user("SUT::TEST::REGISTER", "SUTtest123")) {
			echo "Fel: Registrering av testanvändare misslyckades.";
			return false;
		}
		
		// Kolla om användaren finns
		if (!$sut->user_exists("SUT::TEST::REGISTER")) {
			echo "Fel: Testanvändare hittades inte i databasen.";
			return false;
		}
		
		// Ta bort användaren
		if (!$sut->delete_user("SUT::TEST::REGISTER")) {
			echo "Fel: Borttagning av testanvändare misslyckades.";
			return false;
		}
		
		// Kolla att användaren inte finns längre
		if ($sut->user_exists("SUT::TEST::REGISTER")) {
			echo "Fel: Testanvändaren fanns kvar i databasen.";
			return false;
		}
		
		echo "Lyckat Register-test!";
		return true;
		
	}
	
}

?>